/*
 * Estacionamiento.h
 *
 *  Created on: 04/10/2012
 */

#ifndef ESTACIONAMIENTO_H_
#define ESTACIONAMIENTO_H_

#include <unistd.h>
#include <iostream>
#include <vector>
#include <signal.h>
#include "Constantes.h"
#include "Ticket.h"
#include "Utils.h"
#include "Terminador.h"
#include "Log.h"
#include "Colas/Cola.h"
#include "Colas/Mensajes.h"
#include "Seniales/SignalHandler.h"

using namespace std;

class Estacionamiento : public EventHandler {

private:
	
	int numeroEstacionamiento;
	bool entradasAbiertas;
	bool salidasAbiertas;
	Cola<MensajeTicket> colaAdministrador;
	Cola<MensajeTicket> colaEstacionamiento;
	vector<pid_t> pidsEntradas;
	vector<pid_t> pidsSalidas;
	bool cerrarSalidasPendiente;

	int crearEntradas();
	int crearSalidas();
	void cerrarEntradas();
	void cerrarSalidas();
	void agregarPidEntrada(pid_t pidEntrada);
	void agregarPidSalida(pid_t pidSalida);
	void leerColaEstacionamiento();
	void reservarLugar();
	void liberarLugar(Ticket);

public:
	
	Estacionamiento(int);
	virtual ~Estacionamiento();
	int inicializar();
	void destruir();
	void funcionar();
	int handleSignal(int signum);
	int getNumeroEstacionamiento();

};

#endif /* ESTACIONAMIENTO_H_ */
